const KoaRouter = require("@koa/router")
const { authorVerify } = require("../middleware/login.middleware")
const {
  create,
  list,
  detail,
  update,
  remove,
  addLabels,
} = require("../controller/moment.controller")
const verifyPermission = require("../middleware/permission.middleware")
const { verifyLabelExists } = require("../middleware/label.middleware")

const momentRouter = new KoaRouter({ prefix: "/moment" })

// 1.增：新增动态
momentRouter.post("/", authorVerify, create)
// 2.查：查询动态（列表/id）
momentRouter.get("/", list)
momentRouter.get("/:momentId", detail)
// 3.删：删除动态
momentRouter.delete("/:momentId", authorVerify, verifyPermission, remove)
// 4.改：修改动态
// 只有登入的用户才能修改
// 要验证权限，只有 momentId = id ，动态id=用户id的时候，才能修改当前用户的动态
momentRouter.patch("/:momentId", authorVerify, verifyPermission, update)

// 5.添加标签:
/**
 * 中间件:
    1.是否登录(完成)
    2.验证是否有操作这个动态的权限(完成)
    3.额外中间件: 验证label的name是否已经存在于label表中
    * 如果存在, 那么直接使用即可
    * 如果没有存在, 那么需要先将label的name添加label表
    4.最终步骤
    * 所有的labels都在已经在label表
    * 将动态 moment和 labels 的关系, 添加到关系表中
 */
momentRouter.post(
  "/:momentId/labels",
  authorVerify,
  verifyPermission,
  verifyLabelExists,
  verifyLabelExists,
  addLabels
)

module.exports = momentRouter
